#ifndef MAIN_H_
#define MAIN_H_

#define M_CPU ATMEGA328
/* System and AVR-GCC Includes */
#include <avr/io.h>
#include <avr/iom328.h>

#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <avr/eeprom.h>

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

#include <string.h>

#include <util/delay.h>
#include <util/atomic.h>


/* Custom Includes */
#include <cdefs.h>

/* Software Includes */
#include "support.h"
#include "uart.h"

/** @brief  UART Settings
 *  @param xx
 */
#define UART_BAUD_RATE 115200

/** @brief  Debug mode switch
 *  @param  comment bool
 */
#define ENABLE_DEBUGMODE

/** @brief  Enable Watchdog Timer
 *  @param  comment bool
 */
#define ENABLE_WDT WDTO_1S

/** @brief  Command Char Code's (Input Types)
 *  @desc   This char will be used to determine if console input is a command, help, or info input.
 *  @param  char (byte (with 0x) or char (with '')
 */
#define CMD_CHAR '>'
#define HELP_CHAR '?'
#define INFO_CHAR '@'
#define RST_CHAR '!'

/** @brief  UART Terminal/Console br@ys
 *  @param  comment bool
 */
#define CONSOLE_BRAYS

#define _APP_TITLE_ "Embedded Project Interface & Controller"
#define _APP_VER_ "1"
#define _APP_REV_ "0"

/**
 *  Debug Mode Options; you can decide what level of debugging you want to see.
 */
#ifdef ENABLE_DEBUGMODE
#define __DBG_PRINT_INPUT__
// Normal Debug Level
#define __DBG__
// Extra Debug Level
#define __DBG2__
// All Debug Information
#define __DBG3__ //Not yet implemented.
#endif

/**
 *  !-- Internal- Do not edit. --!
 */
#define CMD_CODE 1
#define HELP_CODE 2
#define INFO_CODE 3

/**
 *  Commands and Functions
 */

void Initilize(void);
void HelpDialog(void);

#endif /* MAIN_H_ */
